package com.smasher.print.dw.template;

import android.util.Log;

import com.smasher.print.core.PrintField;
import com.smasher.print.core.PrintTemplate;

import org.json.JSONObject;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

public class TemplatePrintFactory {

    public static final String TAG = "Factory";

    /**
     * 创建过磅信息卡
     *
     * @param json 信息卡需要的信息
     * @return PrintTemplate
     */
    public static PrintTemplate createBryDbTemplate(JSONObject json) {
        DWPrintTemplate template = new DWPrintTemplate();
        template.setTitle("过磅信息卡");
        template.setTitleAlign(1); // 居中
        template.setTitleBold(true);
        template.setTitleGap(2);
        template.setFooter("---至臻至善---");
        template.setFooterAlign(1); // 居中
        template.setFooterDots(100);
        template.setFooterGap(2);

        List<PrintField> fields = new ArrayList<>();

        // 公司名称
        String company = json.optString("company", "宁夏百瑞源集团");
        DWPrintField companyField = new DWPrintField();
        companyField.setLabel(company);
        companyField.setAlign(1); // 居中
        companyField.setBold(false);
        companyField.setValue("");
        companyField.setGap(2);
        fields.add(companyField);

        // 时间
        String pattern = "yyyy-MM-dd HH:mm";
        long time = System.currentTimeMillis();
        SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.getDefault());
        String formatTime = format.format(new Date(time));
        String timeValue = json.optString("time", formatTime);
        DWPrintField timeField = new DWPrintField();
        timeField.setLabel("时间： ");
        timeField.setAlign(0); // 左对齐
        timeField.setBold(false);
        timeField.setValue(timeValue);
        fields.add(timeField);

        // 品种
        String kind = json.optString("kindName", "未知品种");
        DWPrintField kindField = new DWPrintField();
        kindField.setLabel("品种： ");
        kindField.setAlign(0);
        kindField.setBold(false);
        kindField.setValue(kind);
        fields.add(kindField);

        // 品类
        String qua = json.optString("qualityName", "未知品类");
        DWPrintField quaField = new DWPrintField();
        quaField.setLabel("品类： ");
        quaField.setAlign(0);
        quaField.setBold(false);
        quaField.setValue(qua);
        fields.add(quaField);

        // 产地
        String place = json.optString("placeAddress", "未知产地");
        DWPrintField placeField = new DWPrintField();
        placeField.setLabel("产地： ");
        placeField.setAlign(0);
        placeField.setBold(false);
        placeField.setValue(place);
        fields.add(placeField);

        // 批次
        String batch = json.optString("banchno", "未知批次");
        DWPrintField batchField = new DWPrintField();
        batchField.setLabel("批次： ");
        batchField.setAlign(0);
        batchField.setBold(false);
        batchField.setValue(batch);
        fields.add(batchField);

        // 茬数
        String stuage = json.optString("stuageName", "未知茬数");
        DWPrintField stuageField = new DWPrintField();
        stuageField.setLabel("茬数： ");
        stuageField.setAlign(0);
        stuageField.setBold(false);
        stuageField.setValue(stuage);
        fields.add(stuageField);

        // 车号
        String car = json.optString("carCode", "未知车号");
        DWPrintField carField = new DWPrintField();
        carField.setLabel("车号： ");
        carField.setAlign(0);
        carField.setBold(false);
        carField.setValue(car);
        fields.add(carField);

        // 毛重
        String mw = json.optString("mw", "0");
        DWPrintField mwField = new DWPrintField();
        mwField.setLabel("毛重： ");
        mwField.setAlign(0);
        mwField.setBold(false);
        mwField.setValue(mw);
        fields.add(mwField);

        // 皮重（计算字段）
        String pw = json.optString("pw", "0");
        String pan = json.optString("qw", "0");
        String ksetW = json.optString("bw", "0");

        String tare = calculate(pw, pan, ksetW);
        DWPrintField tareField = new DWPrintField();
        tareField.setLabel("皮重： ");
        tareField.setAlign(0);
        tareField.setBold(false);
        tareField.setValue(tare);
        fields.add(tareField);

        // 车重
        DWPrintField pwField = new DWPrintField();
        pwField.setLabel("车重： ");
        pwField.setAlign(0);
        pwField.setBold(false);
        pwField.setValue(pw);
        fields.add(pwField);

        // 盘重
        DWPrintField panField = new DWPrintField();
        panField.setLabel("盘重： ");
        panField.setAlign(0);
        panField.setBold(false);
        panField.setValue(pan);
        fields.add(panField);

        // 框重
        DWPrintField ksetWField = new DWPrintField();
        ksetWField.setLabel("框重： ");
        ksetWField.setAlign(0);
        ksetWField.setBold(false);
        ksetWField.setValue(ksetW);
        fields.add(ksetWField);

        // 框数
        String kset = json.optString("kset", "0");
        DWPrintField ksetField = new DWPrintField();
        ksetField.setLabel("框数： ");
        ksetField.setAlign(0);
        ksetField.setBold(false);
        ksetField.setValue(kset);
        fields.add(ksetField);

        // 净重
        String jw = json.optString("jw", "0");
        DWPrintField jwField = new DWPrintField();
        jwField.setLabel("净重： ");
        jwField.setAlign(0);
        jwField.setBold(false);
        jwField.setValue(jw);
        fields.add(jwField);

        template.setFields(fields);
        return template;
    }

    private static String calculate(String pw, String pan, String ksetW) {
        BigDecimal result = BigDecimal.ZERO;
        try {
            result = new BigDecimal(pw).add(new BigDecimal(pan)).add(new BigDecimal(ksetW));
        } catch (Exception e) {
            Log.e(TAG, "calculate: ", e);
        }
        return String.valueOf(result.floatValue());
    }
}
